home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Spanish Scene 1
/
SpanishScene1.iso
/
spanish pack n°1 by llfb
/
--llfb--
/
programas
/
sources1.dms
/
sources1.adf
/
SOURCES
/
Vectores
/
Spaceship_in_Starsfield.ASM
< prev
next >
Wrap
Assembly Source File
|
1996-06-04
|
13KB
|
489 lines
;RAYTRACING FILL BY LADO OF FI-RE CREW IN 1992 !
; org $25000
; load $25000
Section Roman,code_c
; >extern 'DF0:raytr.dat',sinus
j lea $30000,a0 ;memoria torlese
lo clr.l (a0)+
cmp.l #$70000,a0
bcs lo
bsr makecor
bsr makemul
bsr makeset
lea $dff000,a6 ;custom
fvv move.l 4(a6),d0
lsr.l #8,d0
cmp.w #$130,d0
bne fvv
move.w #$7fff,$96(a6) ;clear DMACON
move.w #$7fff,$9a(a6) ;clear INTENA
move.l #copper,$84(a6)
clr.w $8a(a6) ;start copper
move.w #$87d0,$96(a6) ;DMACON
move.w #$c010,$9a(a6)
h1 bsr wait ;waitblitter
h2 move.l 4(a6),d0
lsr.l #8,d0
cmp.w #$d0,d0
bne h2
bsr calfil
bsr calstr
bsr clrstr
bsr setstr
bsr filler
btst #6,$bfe001
bne h1
bsr wait
move.w #$7fff,$96(a6)
move.w #$7fff,$9a(a6)
clr.w $88(a6) ;start original copper
move.w #$87f0,$96(a6)
move.w #$e02c,$9a(a6)
clr.l d0
rts ;END
calfil add.w #0,addx ;xszog novelese
and.w #$1ff,addx
add.w #2,addy ;yszog novelese
and.w #$1ff,addy
subq.w #1,lass
bne noadd
move.w #6,lass
add.w #2,addz ;zszog novelese
and.w #$1ff,addz
noadd lea coords(pc),a0 ;kocka pontjainak x,y,z koordinatai
lea sinus(pc),a1 ;sinus ertekek
lea $80(a1),a3 ;cosinus ertekek
lea tarolo1(pc),a2 ;2D x,y letarolasa
lea addx(pc),a4 ;szogek
lea tarolo2(pc),a5
moveq #3,d7 ;8 pont van /kocka/
h3 movem.w (a0)+,d0/d1/d6 ;x,y,z
move.w 4(a4),d5 ;Zszog
bsr calcul ;Z-rotation
move.w d0,d6 ;X tarolasa
move.w d3,d0 ;Y
move.w (a4),d5 ;Xszog
bsr calcul ;X-rotation
move.w d0,d6 ;uj Y tarolasa
move.w d3,d0 ;Z
move.w 2(a4),d5 ;Yszog
bsr calcul ;Y-rotation
exg d0,d3 ;X csere Z-vel Z=d3
move.w d0,(a2)+ ;x,y,z storage
move.w d1,(a2)+
move.w d3,(a2)+
moveq #11,d6
move.w #$400,d2
sub.w d3,d2 ;$444-Z
muls d2,d0 ;z'*x
asr.l d6,d0 ;z'*x/2048=2D X
muls d2,d1 ;z'*y
asr.l d6,d1 ;z'*y/2048=2D Y
add.w #150,d0 ;X=X+150 kozepre a kepernyon
add.w #100,d1 ;Y=Y+100
move.w d0,(a5)+
move.w d1,(a5)+
dbf d7,h3 ;8-szor
move.l #$ffff8000,$72(a6) ;vonalhuzashoz standard ertekek
move.l #$ffffffff,$44(a6)
move.w #120,$60(a6) ;kepernyo szelessege
eor.w #$8000,erno+2 ;kepernyo cserek
eor.w #$8000,copscr ;cserek a copperben is
eor.w #$8000,copscr+4
eor.w #$8000,copscr+8
eor.w #$8000,erny+2
eor.w #$8000,copscr+12
eor.w #$8000,copscr+16
eor.w #$8000,copscr+20
move.l erno(pc),a0 ;aktualis kepernyo
add.l #26+[166*$78],a0 ;az object jobb also oldala
bsr wait ;wait blitter
move.l #$01000002,$40(a6) ;USE D,DESC/csokkeno uzemmod/
move.w #$28-[[10*16]/8],$66(a6) ;DMOD
move.l a0,$54(a6) ;D cel
move.w #$640a,$58(a6) ;vert.-hor. size start bl.
rts
filler lea tarolo2(pc),a1 ;2D x,y ertekek
lea meghat(pc),a2 ;structure
lea sinus+$400(pc),a3 ;sor kezdopontja /0-f/ + $a4a or $b4a
lea sinus+$680(pc),a5 ;szelesseg/2/ es vonal hossz values
move.w (a2)+,lap ;lapok szama /6/
h7 move.l (a2)+,d7 ;hany pontot kosson ossze
move.l (a2)+,a4 ;oszzekotesi sorrend
move.l (a2)+,scr ;melyik kepernyore
move.l (a2)+,col ;mutato a szinpalettara,melyik szin a copp.
move.l erno(pc),a0 ;ide rajzol
movem.w (a4),d0/d1/d2 ;lathatosag eldontese
move.w (a1,d1.w),d3 ;x1
sub.w (a1,d0.w),d3 ;X1-X0
move.w 2(a1,d2.w),d4 ;y2
sub.w 2(a1,d1.w),d4 ;Y2-Y1
move.w 2(a1,d1.w),d5 ;y1
sub.w 2(a1,d0.w),d5 ;Y1-Y0
move.w (a1,d2.w),d6 ;x2
sub.w (a1,d1.w),d6 ;X2-X1
mulu d4,d3 ;(y2-y1)(x1-x0)=d3
mulu d6,d5 ;(y1-y0)(x2-x1)=d5
sub.w d5,d3
bmi vakon ;nem latszik
moveq #10,d5 ;1024
lsr.w d5,d3 ;d3=d3/1024
and.l #$f,d3 ;also 4 bit levalasztasa
add.w d3,d3 ;word
movem.l a0/a1,-(a7)
lea colors(pc),a0 ;szinek
lea copcol(pc),a1 ;copperben a szinek
add.w col(pc),a0 ;uj szin
add.w col+2(pc),a1 ;melyik szin a copperban
move.w (a0,d3.w),d3 ;uj szin bekerese
move.w d3,(a1) ;beirasa a copperbe
movem.l (a7)+,a0/a1
move.w (a4)+,d5 ;1.pont
move.w (a1,d5.w),d0 ;x1 koordinata
move.w 2(a1,d5.w),d1 ;y1 koordinata
bsr lines ;vonalhuzo
vakon subq.w #1,lap ;lapszam csokkentes
bne h7 ;van meg ?
bra fill ;nincs , go fill
lines move.w (a4)+,d5 ;kovetkezo pont
move.w (a1,d5.w),d2 ;x2
move.w 2(a1,d5.w),d3 ;y2
movem.w d2/d3,-(a7) ;kovetkezo pont latarolasa
cmp.w d1,d3 ;y2-y1
bgt p1
exg d0,d2 ;kisebb --> coords csere
exg d1,d3 ;mindig a nagyobb y-bol kell huzni !
beq not
p1 move.w #120,d5 ;kepernyo szelessege
move.w d1,d4 ;nagyobb y
mulu d5,d4 ;120*y = pont sora
move.w d0,d5 ;x0
add.l a0,d4 ;$30000+x0 = pont oszlopa
lsr.w #3,d5 ;pont sora/8
add.w d5,d4 ;megkapja a pont helyet
moveq #0,d5
sub.w d1,d3 ;Y
sub.w d0,d2 ;X /x1-x2/
bpl p2
moveq #1,d5 ;x2 kisebb volt,a kapott X negativ
neg.w d2 ;most mar pozitiv X
p2 move.w d3,d1 ;Y
add.w d1,d1 ;2Y
cmp.w d2,d1 ;X-2Y
dbhi d3,p3 ;csokkenti Y-t ha
p3 move.w d3,d1 ;Y
sub.w d2,d1 ;Y-X
bpl p4
exg d2,d3 ;X csereje Y-al
p4 addx.w d5,d5
add.w d2,d2 ;2Y
move.w d2,d1 ;2Y
sub.w d3,d2 ;2Y-X
addx.w d5,d5
add.w d0,d0
move.w d2,d6
sub.w d3,d6
add.w d3,d3
ok move.w (a5,d3.w),d3 ;$58
move.w (a3,d0.w),d0 ;$40
move.b dat(pc,d5.w),d5 ;melyik siknyolcad
bsr okvonal ;vonalrajz
not movem.w (a7)+,d0/d1
dbf d7,lines
rts
dat dc.l $3431353,$b4b1757 ;siknyolcad
okvonal move.l d7,-(a7)
moveq #2,d7 ;3 lehetoseg
swap d2 ;a d2-ot felhasznalom
move.w scr+2(pc),d2 ;melyik kepernyore
loop lsr.w #1,d2 ;az also 3 bit donti el
bcc noo ;Carry=0 --> nem kell
bsr wait
swap d2 ;eredeti d2
move.w d2,$52(a6) ;2y-x
move.w d0,$40(a6) ;12-15-->sor kezdopontja /0-f/ + a4a
move.b d5,$43(a6) ;siknyolcad
move.l d4,$48(a6) ;vonal kezdocime
move.l d4,$54(a6) ;vonal kezdocime
move.w d1,$62(a6) ;2y
move.w d6,$64(a6) ;2y-2x
move.w d3,$58(a6) ;szelesseg=2 , magassag=vonal hossza
swap d2
noo add.l #$28,d4 ;kovetkezo kepernyo
dbf d7,loop
move.l (a7)+,d7
rts
fill move.l erno(pc),a0 ;aktualis kepernyo
add.l #26+[166*$78],a0 ;az object jobb also sarka
bsr wait ;blitter ready ?
move.l #$9f00012,$40(a6) ;USE AD,LF:A=D,EFE,DESC FCI=0 !
move.w #$28-[[10*16]/8],$64(a6) ;AMOD
move.w #$28-[[10*16]/8],$66(a6) ;DMOD
move.l a0,$50(a6) ;A forras
move.l a0,$54(a6) ;D cel
move.w #$640a,$58(a6) ;vert.-hor. size h=160
rts
calcul move.w (a3,d5.w),d4 ;cos ertek
move.w (a1,d5.w),d5 ;sin ertek
move.w d0,d2 ;c1
move.w d1,d3 ;c2
muls d4,d0 ;c1*cos(c0angle)
muls d5,d1 ;c2*sin(c0angle)
muls d4,d3 ;c2*cos(c0angle)
muls d5,d2 ;c1*sin(c0angle)
sub.l d1,d0 ;c1*cos(c0angle)-c2*sin(c0angle)
add.l d2,d3 ;c2*cos(c0angle)+c1*sin(c0angle)
add.l d0,d0
add.l d3,d3
swap d0 ;uj c1
swap d3 ;uj c2
move.w d6,d1
rts
;**********************************************************************
calstr lea tarolo1(pc),a0
movem.w (a0),d0-d2
asr.w #3,d0
asr.w #3,d1
asr.w #2,d2
add.w d0,d0
add.w d1,d1
add.w d2,d2
lea scoord(pc),a0
moveq #$31,d7
move.w #$400,d6
move.w #$1fff,d5
move.w #$7fe,d4
add.w #$400,d0
add.w #$400,d1
km1 move.w (a0),d3
add.w d0,d3
and.w d4,d3
sub.w d6,d3
move.w d3,(a0)+
move.w (a0),d3
add.w d1,d3
and.w d4,d3
sub.w d6,d3
move.w d3,(a0)+
add.w d2,(a0)
and.w d5,(a0)+
dbf d7,km1
rts
setstr lea scoord(pc),a0
move.l erny(pc),a1
lea tarolo3(pc),a3
lea szor(pc),a5
moveq #$31,d7
move.w #$a0,d4
km7 movem.w (a0)+,d0-d2
muls (a5,d2.w),d0
muls (a5,d2.w),d1
swap d0
swap d1
add.w d4,d0
add.w d4,d1
cmp.w #$c0,d1
bhi nott
cmp.w #$13f,d0
bhi nott
cmp.w #$7d0,d2
blt two
cmp.w #$1388,d2
blt tree
move.b sets(pc,d0.w),d6 ;melyik bitet kell setbe
asr.w #3,d0 ;x/8 --> oszlop
mulu #$78,d1 ;y*$78 --> sor
add.w d1,d0 ;pont helye
move.w d0,(a3)+
or.b d6,(a1,d0.w) ;pont bekapcsolasa
dbf d7,km7
rts
two move.b sets(pc,d0.w),d6
asr.w #3,d0
mulu #$78,d1
add.w d1,d0
move.w d0,(a3)+
or.b d6,(a1,d0.w)
or.b d6,$28(a1,d0.w)
dbf d7,km7
rts
tree move.b sets(pc,d0.w),d6
asr.w #3,d0
mulu #$78,d1
add.w d1,d0
move.w d0,(a3)+
or.b d6,$28(a1,d0.w)
nott dbf d7,km7
rts
sets blk.w 160,0
clrstr move.l erny(pc),a1
lea $28(a1),a2
lea tarolo3(pc),a3
lea tarolo4(pc),a4
moveq #$31,d7
km8 move.w (a4),d0
move.w (a3)+,(a4)+
clr.b (a1,d0.w)
clr.b (a2,d0.w)
dbf d7,km8
rts
makecor lea scoord(pc),a0
moveq #$3f,d7
km2 move.w #$40,d0
bsr szami
sub.w #$20,d0
muls #$20,d0
move.w d0,(a0)+
move.w #$40,d0
bsr szami
sub.w #$20,d0
muls #$20,d0
move.w d0,(a0)+
move.w #$1f4,d0
bsr szami
mulu #$10,d0
move.w d0,(a0)+
dbf d7,km2
rts
szami move.w d0,d5
move.w d5,d4
subq.w #1,d4
move.l numi(pc),d0
km3 add.l d0,d0
bhi km4
eor.l #$1d872b41,d0
km4 lsr.w #1,d4
bne km3
move.l d0,numi
tst.w d5
bne km5
swap d0
bra km6
km5 mulu d5,d0
km6 clr.w d0
swap d0
rts
makemul lea szor(pc),a0
move.w #$effc,d0
move.w #$1000,d1
km10 move.w #$2bc,d2
move.w #$2bc,d4
move.w #$8000,d3
muls d3,d2
sub.w d0,d4
divs d4,d2
move.w d2,(a0)+
addq.w #1,d0
dbf d1,km10
rts
makeset lea sets(pc),a0
move.w #39,d7
km11 move.l #$80402010,(a0)+
move.l #$08040201,(a0)+
dbf d7,km11
rts
wait btst #$e,2(a6) ;waitblitter
bne wait
rts
copper dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
dc.w $180,0,$108,$50,$10a,$50,$182
copcol dc.w 0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,$ddd,$194,$777,$196,$222,$198,0,$19a,0
dc.w $19c,0,$19e,0
dc.w $e0,3,$e8,3,$f0,3,$e4,4,$ec,4,$f4,4,$e2
copscr dc.w 0,$ea,$28,$f2,$50,$e6,0,$ee,$28,$f6,$50
dc.w $3001,$fffe,$100,$6600,$180,$ff0,$3101,$fffe,$180,0
dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
dc.w $ffff,$fffe
coords dc.w -100,0,0,100,0,90,100,0,-90,80,70,0
;1:alap 2:alap+$28 3:alap,alap+$28 4:alap+$50 5:alap,alap+$50
;6:alap+$28,alap+$50 7:alap,alap+$28,alap+$50
meghat dc.w 4
dc.l 2,kot1,1,$00540000
dc.l 2,kot2,2,$00540004
dc.l 2,kot4,4,$0038000c
dc.l 2,kot3,3,$00540008
kot1 dc.w 0,4,8,0
kot2 dc.w 4,0,12,4
kot3 dc.w 12,0,8,12
kot4 dc.w 8,4,12,8
; kek
colors dc.w 6,7,8,9,10,11,12,13,14,15,$11f,$22f,$33f,$44f
; piros
dc.w $600,$700,$800,$900,$a00,$b00
dc.w $c00,$d00,$e00,$f00,$f11,$f22,$f33,$f44
; zold
dc.w $60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0
dc.w $f1,$f2,$f3,$f4
; sarga
dc.w $660,$770,$880,$990,$aa0,$bb0,$cc0
dc.w $dd0,$ee0,$ff0,$ff1,$ff2,$ff3,$ff4
; lila
dc.w $303,$404,$505,$606,$707,$808,$909,$a0a,$b0b,$c0c
dc.w $d0d,$e0e,$f0f
; cyan
dc.w 0,$11,$22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
; feher
dc.w 0,$111,$222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc
dc.w $ddd,$eee,$fff
addx dc.w 240 ;xangle
addy dc.w 0 ;yangle
addz dc.w 0 ;zangle
lap dc.w 0 ;siklapok szama/object
scr dc.l 0 ;kepernyo
col dc.l 0 ;color , coppercolor
numi dc.l $1b3
lass dc.w 5
erno dc.l $38000 ;kepernyo
erny dc.l $48000
sinus incbin "Coleccion_Sources1:Sources/Vectores/raytr.dat"
szor blk.w $1002,0
scoord blk.w 256,0
tarolo1 blk.w 200,0
tarolo2 blk.w 100,0
tarolo3 blk.w 50,0
tarolo4 blk.w 50,0